#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int t;
int a[N];
int c[N];
int d[505][30][505];

int f(int x)
{
	int i=0,j=1;
	while(j<x)
		i++,j*=2;
	return i;
}

int winer(int rod,int ord,int l,int r)
{
	if(rod==0)return ord;
	int mid=(l+r)/2;
	int x=winer(rod-1,ord*2-1,l,mid);
	int y=winer(rod-1,ord*2,l,mid);
	if((d[rod][ord]&&a[x]>=r)||(!d[rod][ord]&&a[y]<r))return x;
	else return y;
	
}

int main()
{
	freopen("arena.in","r",stdin);
	freopen("arena.out","w",stdout);
	int n,m;
	cin>>n>>m;
	int w[N];
	for(int i=1;i<=n;i++)
		cin>>w[i];
	int K=f(n);
	for(int i=1;i<=m;i++)
	{
		cin>>c[i];
		for(int j=1;j<=K;j++)
		{
			string s;
			cin>>s;
			for(int k=0;k<s.size();k++)
				d[i][j][k]=s[k]-'0';
		}
	}
	cin>>t;
	while(t--)
	{
		int x[4];
		cin>>x[0]>>x[1]>>x[2]>>x[3];
		for(int i=1;i<=n;i++)
			a[i]=w[i]^x[i%4];
		int ans=0;
		for(int i=1;i<=m;i++)
			ans=ans^(i*winer(f(c[i]),1,1,c[i]));
		cout<<ans<<endl;
	}
	return 0;
}
